1
L'obbligo prestazionale
AI031Lesson 5
00:00

L'ottimizzazione moderna è una collaborazione tra scelte algoritmiche di alto livello e consapevolezza delle caratteristiche hardware. Mentre Efficienza asintotica definisce i limiti teorici, mentre il Obbligo prestazionale esige che affrontiamo fattori costanti che i compilatori non possono risolvere da soli.

1. La gerarchia dell'ottimizzazione

Il successo segue un processo lineare: innanzitutto, elimina inefficienza asintotica (ad esempio, $O(N^2) \to O(N)$). Successivamente, affronta Blocchi all'ottimizzazione—principalmente Aliasing della memoria e il sovraccarico delle chiamate di procedura (come il controllo dei limiti costanti controllo dei limiti in get_vec_element).

2. Flusso di dati e vincoli

I compilatori sono cauti per motivi di sicurezza; non ottimizzeranno se un puntatore *dest potrebbe sovrapporsi al vettore data. Misuriamo la velocità nel mondo reale tramite Cicli per elemento (CPE). Le prestazioni sono spesso modellate con fattori di scala come $\alpha = 0.974$, dove il sovraccarico sposta la curva di esecuzione (ad esempio, $209/\alpha = 39.0$).

150100500Lineare inferioreHash miglioreGrande tabellaQuicksortInizialeLineareInferioreMiglioreHashGrandeTabellaQuicksortInizialeCollo di bottiglia asintoticoFigura 5.38(a): Scalabilità delle prestazioni degli n-grammi (secondi CPU)

3. Realtà hardware

L'ottimizzazione richiede la comprensione del Unità di ritiro e del Percorso critico. Anche i cicli semplici sono limitati dal Limite di attraversamento delle unità funzionali o dal Limite di latenza dei percorsi dipendenti.

main.py
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>